Document EF Core 9 breaking change: NoTrackingWithIdentityResolution restricted for JSON collection queries#5413
Open
AndriySvyryd with Copilot wants to merge 5 commits into
Open
Document EF Core 9 breaking change: NoTrackingWithIdentityResolution restricted for JSON collection queries#5413AndriySvyryd with Copilot wants to merge 5 commits into
AndriySvyryd with Copilot wants to merge 5 commits into
Conversation
… for JSON collections (EF Core 9)
Copilot
AI
changed the title
[WIP] Add validator for entity materialization order
Document EF Core 9 breaking change: NoTrackingWithIdentityResolution restricted for JSON collection queries
Jul 3, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Documents an EF Core 9 breaking change that prohibits certain AsNoTrackingWithIdentityResolution() query patterns involving JSON-mapped entity collections, to prevent incorrect materialization and to surface clearer exceptions.
Changes:
- Added a new Low-impact entry to the EF Core 9 breaking changes summary table.
- Added a new breaking change section describing old vs. new behavior, rationale, and mitigations (switch to
AsTracking()orAsNoTracking()).
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
AndriySvyryd
reviewed
Jul 3, 2026
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
|
||
| #### Old behavior | ||
|
|
||
| Previously, using <xref:Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsNoTrackingWithIdentityResolution*> (or setting <xref:Microsoft.EntityFrameworkCore.QueryTrackingBehavior.NoTrackingWithIdentityResolution>) with queries that include JSON-mapped entity collections could silently produce incorrect results or data corruption, depending on the order in which entities were processed during materialization. Additionally, such queries could throw an unhelpful `Invalid token type: 'StartObject'` exception in some scenarios. |
|
|
||
| #### New behavior | ||
|
|
||
| Starting with EF Core 9.0, EF Core restricts the use of <xref:Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsNoTrackingWithIdentityResolution*> for certain JSON collection query patterns, to prevent silent data corruption: |
|
|
||
| Starting with EF Core 9.0, EF Core restricts the use of <xref:Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsNoTrackingWithIdentityResolution*> for certain JSON collection query patterns, to prevent silent data corruption: | ||
|
|
||
| - If entity instances in a JSON collection would be materialized in an order that could cause data corruption, EF Core throws an exception instructing the user to use a different tracking behavior. |
|
|
||
| #### Why | ||
|
|
||
| The combination of <xref:Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsNoTrackingWithIdentityResolution*> and JSON collections could silently produce incorrect materialized objects due to how JSON is streamed from the database: nested includes in JSON are part of the parent's materialization rather than being materialized separately. The stand-alone change tracker used for identity resolution relies on key values to deduplicate entity instances, but when LINQ operators are applied to JSON collections, EF Core cannot reliably propagate those key values to the materializer, resulting in entities with null keys and potential data corruption. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #4932
Using
AsNoTrackingWithIdentityResolution()with JSON-mapped entity collections could silently corrupt data or throw unhelpful exceptions in EF Core 8 and earlier, due to how JSON is streamed and materialized. EF Core 9 adds a validator and explicit prohibitions to surface these problems clearly.Changes
ef-core-9.0/breaking-changes.mdStartObjectexception), new (explicit exception), why (key values not propagated for JSON collection queryable operators → null keys), and mitigationsProhibited pattern (now throws)
Mitigations
Switch to
AsTracking()(for identity resolution) orAsNoTracking()(no deduplication needed).